El arte de modelar

Una exploración en profundidad sobre el aprendizaje automático para la creación de modelos predictivos
Autor/a

Grupo A

Fecha de publicación

16 de diciembre de 2024

1 Introducción

En el contexto del análisis de datos y aprendizaje automático, herramientas como ImageJ, Anaconda, Python y Label Studio desempeñan un papel crucial. Cada una ofrece funcionalidades específicas para diferentes etapas de un proyecto: desde la adquisición y preprocesamiento de imágenes hasta la anotación de datos y el entrenamiento de modelos. Este informe presenta una guía detallada sobre la instalación, configuración y uso de estas herramientas. Además, se explicará el procedimiento para entrenar un modelo con datos anotados en Label Studio, integrándolos a un entorno en RStudio.

2 Programas

2.1 ImageJ

ImageJ es un software de código abierto diseñado para el análisis de imágenes multidimensionales. Es ampliamente utilizado en investigaciones biomédicas y científicas debido a su capacidad para realizar tareas como la medición de áreas, el conteo de partículas y la aplicación de transformaciones a imágenes.

Descripción de la imagen

Usos principales

  • Análisis cuantitativo de imágenes (medición de áreas, perímetros y más).

  • Aplicación de filtros para mejorar la calidad de las imágenes.

  • Automatización de tareas repetitivas mediante macros.

  • Segmentación de regiones específicas en imágenes.

2.2 Anaconda

Anaconda es una distribución de Python y R que simplifica la gestión de bibliotecas y entornos de desarrollo. Incluye herramientas como Jupyter Notebook y Spyder, y se utiliza principalmente en análisis de datos, aprendizaje automático y otras aplicaciones científicas. Descripción de la imagen

Usos principales - Creación de entornos virtuales independientes.

  • Instalación de herramientas como Jupyter Notebook y bibliotecas para análisis y aprendizaje automático (Scikit-learn, TensorFlow, etc.).

  • Gestión eficiente de proyectos con distintas configuraciones.

2.3 Label Studio

Label Studio es una herramienta de código abierto para la anotación de datos. Permite realizar tareas de etiquetado en texto, imágenes, audio y video, facilitando la creación de conjuntos de datos listos para el entrenamiento de modelos de aprendizaje automático. Descripción de la imagen

Usos principales - Creación de conjuntos de datos etiquetados para entrenar modelos de IA.

  • Colaboración en equipo para garantizar anotaciones consistentes.

  • Exportación de datos en formatos como JSON o CSV para integrarlos en flujos de trabajo de aprendizaje automático.

3 Instalación de herramientas para anotación de datos

3.1 Instalación de Anaconda

  • Descargar el instalador desde https://www.anaconda.com/

  • Ejecutar el archivo descargado

  • Seguir las instrucciones del instalador

  • Verificar la instalación ejecutando conda list en el terminal

3.2 Instalación de Label Studio

Label Studio ofrece cuatro métodos de instalación: a través de pip, brew, Git y Docker. En esta guía, nos centraremos en el método de instalación de pip. Para instalar Label Studio a través de pip, ejecute el siguiente comando:

pip install label-studio

Una vez que haya instalado Label Studio, puede ejecutar la aplicación utilizando el siguiente comando:

label-studio

Se abrirá la aplicación Label Studio:

Descripción de la imagen

Cuando abras Label Studio por primera vez, se te solicitará que crees una cuenta. Haz clic en “Registrarse” si aún no tienes una cuenta.

4 Subir imágenes a Label Studio

Antes de cargar imágenes para realizar anotaciones, debemos crear un proyecto en el que se almacenarán nuestras imágenes. Haga clic en el botón “Crear proyecto” en la página de inicio de Label Studio:

Descripción de la imagen

A continuación, elija un nombre para su proyecto. Si lo desea, especifique una descripción para su proyecto.

Descripción de la imagen

A continuación, haga clic en Data import. Aquí, puede cargar imágenes y videos en una variedad de formatos para usar en el etiquetado.

Descripción de la imagen

Puede cargar hasta 100 imágenes a la vez mediante la interfaz web.

A continuación, haga clic en “Configuración de etiquetado” y elija un tipo de tarea.En nuestro caso elegimos Semantic Segmentation with Polygons

Una vez que haya seleccionado un tipo de tarea, aparecerá una interfaz de usuario del entorno de etiquetado para el tipo de tarea elegido.

En la barra lateral, elimine las etiquetas predeterminadas y agregue las etiquetas que agregará a las imágenes en su conjunto de datos. Para esta guía, agregaremos dos etiqueta:

leaf

coin

Cuando esté listo, haga clic en “Guardar” para guardar su configuración e ingresar a la herramienta de etiquetado.

Para comenzar a etiquetar, haz clic en “Etiquetar todas las tareas” en el panel de control de tu proyecto. Si quieres etiquetar una imagen específica, haz clic en la imagen que deseas etiquetar.

5 Anotación en Label Studio

6 Cómo exportar datos de Label Studio

Para exportar datos desde Label Studio, dirígete a la página de inicio de tu proyecto y haz clic en el botón Export. Aparecerá una lista de opciones de exportación.

7 Entrenamiento del modelo de aprendizaje

Código
library(caret)
Cargando paquete requerido: ggplot2
Cargando paquete requerido: lattice
Código
library(dplyr)

Adjuntando el paquete: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
Código
library(jsonlite)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ lubridate 1.9.3     ✔ tibble    3.2.1
✔ purrr     1.0.2     ✔ tidyr     1.3.1
✔ readr     2.1.5     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter()  masks stats::filter()
✖ purrr::flatten() masks jsonlite::flatten()
✖ dplyr::lag()     masks stats::lag()
✖ purrr::lift()    masks caret::lift()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Código
library(rpart)
library(rpart.plot)

# Ruta al archivo JSON (ajusta esta ruta)
json_file <- "result.json"

# Cargar y explorar los datos
raw_data <- fromJSON(json_file, flatten = TRUE)

# Preparar los datos
annotations <- raw_data$annotations %>% as.data.frame()
images <- raw_data$images %>% as.data.frame()
categories <- raw_data$categories %>% as.data.frame()

# Relacionar las tablas mediante "image_id" y "category_id"
data <- annotations %>%
  left_join(images, by = c("image_id" = "id")) %>%
  left_join(categories, by = c("category_id" = "id"))

# Seleccionar columnas relevantes (puedes ajustar según tu necesidad)
data <- data %>%
  select(file_name, width, height, category_id, name) %>%
  mutate(category_id = as.factor(category_id),
         name = as.factor(name))

# Dividir los datos en conjuntos de entrenamiento y prueba
set.seed(123)
train_index <- createDataPartition(data$category_id, p = 0.8, list = FALSE)
train_data <- data[train_index, ]
test_data <- data[-train_index, ]

# Entrenar un modelo de clasificación (Árbol de decisión)
modelo <- rpart(category_id ~ width + height, data = train_data, method = "class")

# Visualizar el árbol de decisión
rpart.plot(modelo)

Código
# Evaluar el modelo
predicciones <- predict(modelo, newdata = test_data, type = "class")
matriz_confusion <- confusionMatrix(predicciones, test_data$category_id)
print(matriz_confusion)
Confusion Matrix and Statistics

          Reference
Prediction 0 1
         0 0 0
         1 9 9
                                          
               Accuracy : 0.5             
                 95% CI : (0.2602, 0.7398)
    No Information Rate : 0.5             
    P-Value [Acc > NIR] : 0.592735        
                                          
                  Kappa : 0               
                                          
 Mcnemar's Test P-Value : 0.007661        
                                          
            Sensitivity : 0.0             
            Specificity : 1.0             
         Pos Pred Value : NaN             
         Neg Pred Value : 0.5             
             Prevalence : 0.5             
         Detection Rate : 0.0             
   Detection Prevalence : 0.0             
      Balanced Accuracy : 0.5             
                                          
       'Positive' Class : 0               
                                          
Código
# Guardar el modelo entrenado
saveRDS(modelo, "modelo_clasificacion_hojas.rds")

8 Conclusiones

Con Label Studio, puede anotar datos para una variedad de tipos de tareas de aprendizaje automático, desde el procesamiento del lenguaje natural hasta la visión artificial. Label Studio ofrece dos opciones: Community Edition, donde usted mismo hospeda la herramienta de anotación, y Enterprise, donde Human Signal ofrece una versión hospedada de Label Studio con funciones adicionales.

9 Bibliografía

Challenger Pérez, Ivet, Yanet Díaz Ricardo, and Roberto Antonio Becerra García. 2014. “El Lenguaje de Programación Python/The Programming Language Python.” Revista Ciencias Holguín 20:1–13.

Gomez Ernesto, Soto. 2021. “Python En Ingeniería En Ciencias Informáticas: Proyecciones Las Dimensiones Práctica, Científica y Social.” Serie Científica de La Universidad de Las Ciencias Informáticas 14(12):7–8.

Martín, Enrique, and Fernando Sáenz. 2016. “Sistema ANACONDA Para El Análisis Automático de La Calidad Del Software.” Telefónica Móviles España.

Abràmoff, M., Magalhães, P. J., & Ram, S. (2004). Image processing with ImageJ. Kakkar, G. T., Rajoria, A., Kalluraya, M. P., Raju, A., Cao, J., Rong, K., & Arulraj, J. (2023). Interactive Demonstration of EVA. Proceedings of the VLDB Endowment, 16(12), 4082–4085. https://doi.org/10.14778/3611540.3611626

Schroeder, A. B., Dobson, E. T. A., Rueden, C. T., Tomancak, P., Jug, F., & Eliceiri, K. W. (2020). The ImageJ ecosystem: Open‐source software for image visualization, processing, and analysis. Protein Science, 30(1), 234–249. https://doi.org/10.1002/PRO.3993

Tessmer, M. H., & Stoll, S. (2022). chiLife: An open-source Python package for in silico spin labeling and integrative protein modeling. BioRxiv, 19(3). https://doi.org/10.1371/JOURNAL.PCBI.1010834

Weistrand, O., & Svensson, S. (2015). The ANACONDA algorithm for deformable image registration in radiotherapy. Medical Physics, 42(1), 40–53. https://doi.org/10.1118/1.4894702